<?php
include_once "../funciones/class_carrito_orden.php";
include_once "filtro_cabecera.php";
include_once "../funciones/funciones_php.php";
/**
 * @author Jorge Flores
 * ingresa datos de factura a la base de datos
 *
 */

?>
<html>
<head>
    <link rel="stylesheet" type="text/css" href="../css/plantilla.css" />
</head>
<body>
<?php
//incluye el panel
include_once "panel_operacion.php";

//Si existe el carrito y no esta vacio
if(isset($_SESSION['carrito_orden_factura'], $_SESSION['datos_comprobante_factura'], $_SESSION['ruta_factura'], $_POST['opcion_impresion']) && !$_SESSION['carrito_orden_factura']->vacio() && validaInt($_POST['opcion_impresion'])){
    
    //Conecta con la BD
    $conexion = conectar();
    $plantilla = limpiaSql($_POST['opcion_impresion']);
    $carrito = $_SESSION['carrito_orden_factura'];
    $arrayRuta = $_SESSION['ruta_factura'];
    $arrayValorFactura = $_SESSION['valorFactura'];
    $num_orden = $_SESSION['datos_comprobante_factura']['num_comprobante'];
    $fecha_emision_comprobante = fechaSql($_SESSION['datos_comprobante_factura']['fecha_emision']);
    $choferRetiro = $_SESSION['datos_comprobante_factura']['chofer'];
    $id_cliente = $_SESSION['datos_comprobante_factura']['id_remitente'];
    $nomCliente = $_SESSION['datos_comprobante_factura']['nombre_remitente'];
    $idDepartamento = $_SESSION['datos_comprobante_factura']['id_departamento'];
    $idComunaOrigen = $_SESSION['datos_comprobante_factura']['id_comuna_origen'];
    
    //Comienza la transaccion del ingreso de la orden de flete
    pg_query("BEGIN")or die(phpAlertDialog("Ocurrio un error en el proceso de ingreso de orden","Error","crear_orden_flete_factura.php"));
    
    /**
    *
    *   PROCESO DE INGRESO DE COMPROBANTE
    *
    */
    
    //Comprueba si el comprobante existe
    $sql = sprintf("SELECT id_comprobante FROM comprobante WHERE id_comprobante = '%s'",pg_escape_string($num_orden));
    $consulta = pg_query($sql)or die(phpAlertDialog("Ocurrio un error en el proceso de ingreso de orden","Error","crear_orden_flete_factura.php"));
    $numFilas = pg_num_rows($consulta);
    
    //si el comprobante no existe, lo ingresa
    if($numFilas == 0){
        //Ingreso de comprobante a la BD
        $sql = sprintf("INSERT INTO comprobante (id_comprobante,id_cliente,fecha_emision)
                    VALUES ('%s','%s','%s')",pg_escape_string($num_orden),pg_escape_string($id_cliente),pg_escape_string($fecha_emision_comprobante));
        $consulta = pg_query($sql)or die(phpAlertDialog("Ocurrio un error en el proceso de ingreso de orden","Error","crear_orden_flete_factura.php"));
            
    }
    else{ //Si el comprobante existe, comprueba que el cliente sea el mismo
    
        $sql = sprintf("SELECT id_comprobante FROM comprobante WHERE id_comprobante = '%s' AND id_cliente = '%s'",
                       pg_escape_string($num_orden), pg_escape_string($id_cliente));
        $consulta = pg_query($sql)or die(phpAlertDialog("Ocurrio un error en el proceso de ingreso de orden","Error","crear_orden_flete_factura.php"));
        $numFilas = pg_num_rows($consulta);
        
        if($numFilas == 0){ //si el cliente no esta asignado a ese comprobante
        
            die(phpAlertDialog("El comprobante ingresado pertenece a otro cliente.<br />Debe corregir este error, asignando el cliente que corresponde.","Error","crear_comprobante_factura.php"));
        }
        
    }
    
    //Recorre cada orden de flete
    for($i = 0; $i < $carrito->getUltimoId() ; $i++){
        
         //Si la orden no esta eliminada de la lista la ingresa
        if(!$carrito->lineaEliminada($i)){
            
            //Obtiene los datos de la orden de flete
            $rut = $carrito->getRut($i);
            $nombre = $carrito->getNombre($i);
            $apellido = $carrito->getApellido($i);
            $telefono = $carrito->getTelefono($i);
            $direccion = $carrito->getDireccion($i);
            $numDireccion = $carrito->getNumDireccion($i);
            $depto = $carrito->getDepto($i);
            $idComuna = $carrito->getIdComuna($i);
            $comuna = $carrito->getComuna($i);
            $contacto = $carrito->getContacto($i);
            $correo = $carrito->getCorreo($i);
            $tipoEnvio = $carrito->getTipoEnvio($i);
            $factura = $carrito->getFactura($i);
            $ruta = $arrayRuta[$i];
            $subtotal = $arrayValorFactura['subtotal'][$i];
            $total = $arrayValorFactura['total'][$i];
            $recargo = $arrayValorFactura['recargo'][$i];
            
            
            /******************************************
            *                                        *
            *  Proceso de ingreso de orden de flete  *
            *                                        *
            *******************************************/
            
            //Crea la consulta, para insertar la orden
            $sql = sprintf("INSERT INTO orden_flete (id_cliente, id_cliente_departamento, fecha_emision, id_estado_orden, enviado_por, rut_consignatario, nombre_consignatario,
                           apellido_consignatario, telefono_consignatario, direccion_consignatario, numero_direccion, numero_depto,
                           id_comuna, contacto_consignatario, correo_consignatario, id_tipo_envio,instrucciones_especiales, id_comprobante
                           , id_empleado_retiro, id_tipo_pago, id_tipo_servicio, subtotal, total, recargo_factura, id_comuna_origen, id_cliente_facturacion)
                           VALUES ('%s', '%s', now(), '3', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 3, 2, '%d', '%d', '%f', '%s', '%s') RETURNING id_orden_flete",
                           pg_escape_string($id_cliente),
                           pg_escape_string($idDepartamento),
                           pg_escape_string($nomCliente),
                           pg_escape_string($rut),
                           pg_escape_string($nombre),
                           pg_escape_string($apellido),
                           pg_escape_string($telefono),
                           pg_escape_string($direccion),
                           pg_escape_string($numDireccion),
                           pg_escape_string($depto),
                           pg_escape_string($idComuna),
                           pg_escape_string($contacto),
                           pg_escape_string($correo),
                           pg_escape_string($tipoEnvio),
                           pg_escape_string($instruccionesEsp),
                           pg_escape_string($num_orden),
                           pg_escape_string($choferRetiro),
                           pg_escape_string($subtotal),
                           pg_escape_string($total),
                           pg_escape_string($recargo),
                           pg_escape_string($idComunaOrigen),
                           pg_escape_string($id_cliente));
            
            //hace la consulta,para ingresar la orden
            $consulta = pg_query($sql)or die(phpAlertDialog("Ocurrio un error en el proceso de ingreso de orden","Error","crear_orden_flete_factura.php"));
            //Obtiene el id de autoincrement
            $id_fila = pg_fetch_row($consulta);
            $idOrdenEnvio[$i] = $id_fila[0];
            
             //Deja la orden de flete en proceso recepcionado en central finiquitado
            $sql = sprintf("INSERT INTO orden_flete_estado_orden (id_orden_flete,id_estado_orden,fecha,id_observacion)
                    VALUES ('%s' , '1' , now() , '1')",pg_escape_string($idOrdenEnvio[$i]));
            pg_query($sql)or die(phpAlertDialog("Ocurrio un error en el proceso de ingreso de orden","Error","crear_orden_flete_factura.php"));
            
            $sql = sprintf("INSERT INTO orden_flete_estado_orden (id_orden_flete,id_estado_orden,fecha,id_observacion)
                    VALUES ('%s' , '2' , now() , '1')",pg_escape_string($idOrdenEnvio[$i]));
            pg_query($sql)or die(phpAlertDialog("Ocurrio un error en el proceso de ingreso de orden","Error","crear_orden_flete_factura.php"));
    
            $sql = sprintf("INSERT INTO orden_flete_estado_orden (id_orden_flete,id_estado_orden,fecha,id_observacion)
                    VALUES ('%s' , '3' , now() , '1')",pg_escape_string($idOrdenEnvio[$i]));
            pg_query($sql)or die(phpAlertDialog("Ocurrio un error en el proceso de ingreso de orden","Error","crear_orden_flete_factura.php"));
    
            /***********************************************
            *                                             *
            *  Proceso de ingreso de encomienda           *
            *                                             *
            ***********************************************/
                 
            
            
            //Ingresa Facturas, si es que hay
            if(!empty($factura))
            {
            
                //Crea la consulta
                $sql = sprintf("INSERT INTO encomienda(id_orden_flete, cantidad, id_tipo_encomienda, num_factura, tipo_pago)
                       VALUES ('%d', 1, '4', '%d', '') RETURNING id_encomienda",
                       pg_escape_string($idOrdenEnvio[$i]),pg_escape_string($factura));
  
                //Ingresa facturas
                $consulta = pg_query($sql)or die(phpAlertDialog("Ocurrio un error en el proceso de ingreso de orden","Error","crear_orden_flete_factura.php"));
                //Obtiene el id con que se ingreso la encomienda
                $id_encomienda = pg_fetch_array($consulta);
            
                //Crea el codigo de barra
                $codigo_barra = $idOrdenEnvio[$i]."S4S1";
                //consulta para ingresar la identificacion del sobre
                $sql = sprintf("INSERT INTO detalle_encomienda (id_encomienda, codigo_barra, estado_llegada, estado_finiquito, fecha_llegada, fecha_finiquito)
                                VALUES ( '%d', '%s', '1', '1', now(), now() )",
                                pg_escape_string($id_encomienda['id_encomienda']),pg_escape_string($codigo_barra));
                $consulta = pg_query($sql) or die(phpAlertDialog("Ocurrio un error en el proceso de ingreso de orden","Error","crear_orden_flete_factura.php"));
            }
    
            
        }
        
    }//Pasa a la proxima orden de flete si es que hay
    
    //Termina la transaccion
    pg_query("COMMIT")or die(phpAlertDialog("Ocurrio un error en el proceso de ingreso de orden","Error","crear_orden_flete_factura.php"));
    
    //Genera un array con todas las ordenes de envio para enviarlo por URL
    $arrayOrdenEnvio =  implode("|",$idOrdenEnvio);
    
    //$arrayIdCliente = implode("|",$_SESSION['id_cliente_factura']);
    
    //Elimina el carrito, con todas las ordenes
    unset($_SESSION['carrito_orden_factura']);
    unset($_SESSION['datos_comprobante_factura']);
    pg_close($conexion);
    
    phpAlertDialog("Ordenes generadas con exito","Titulo","crear_comprobante_factura.php");
    
   //Imprime los ticket que se generaron
    getImpresion($plantilla,$arrayOrdenEnvio);
    
}
else
{
    die(phpAlertDialog("Error de proceso","Error","crear_comprobante_factura.php"));
}   

?>

</body>
</html>